package com.zsj.arithmetic.ListAndMap;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 错误的集合
 *
 * 集合 s 包含从 1 到 n的整数。不幸的是，因为数据错误，导致集合里面某一个数字复制了成了集合里面的另外一个数字的值
 * 导致集合 丢失了一个数字 并且 有一个数字重复 。
 * 给定一个数组 nums 代表了集合 S 发生错误后的结果。
 * 请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。
 *
 * 题目的意思就是找出相同元素然后+1，然后把这两个数字返回到新数组中
 */
public class ListAndMapDemo1 {
    /**
     * 测试
     */
    public static void main(String[] args) {
        int [] a = {1,2,2,3,4};
        int[] ints =findErrorNums(a);
        for (int i = 0; i < ints.length; i++) {
            System.out.println(ints[i]);
        }
    }

    /**
     * 找出相同元素然后+1，然后把这两个数字返回到新数组中
     * @param nums 数组
     * @return 返回新数组
     */
        public static int[] findErrorNums(int[] nums) {
            int[] errorNums = new int[2];
            int n = nums.length;
            Arrays.sort(nums);
            int prev = 0;
            for (int i = 0; i < n; i++) {
                int curr = nums[i];
                if (curr == prev) {
                    errorNums[0] = prev;
                } else if (curr - prev > 1) {
                    errorNums[1] = prev + 1;
                }
                prev = curr;
            }
            if (nums[n - 1] != n) {
                errorNums[1] = n;
            }
            return errorNums;
        }

    }
